<template>
	<el-main>
		<el-card class="box-card" shadow="never">
			<div class="search-box">
				<el-form :inline="true" :model="searchForm" class="demo-form-inline">
					<el-form-item label="标签名称">
						<el-input v-model="searchForm.name" placeholder="" clearable></el-input>
					</el-form-item>
					<el-form-item>
						<el-button type="primary" @click="onSubmit" icon="el-icon-search">查询</el-button>
					</el-form-item>
				</el-form>
			</div>
			<div style="width:100%;height:0;border-bottom:#E4E7ED 1px dashed;margin-bottom: 10px"></div>
			<el-button type="primary" icon="el-icon-plus" @click="addLabel" style="margin-top: 10px">添加标签
			</el-button>
			<div style="width:100%;height:0;border-bottom:#E4E7ED 1px dashed;margin-top: 10px"></div>
			<el-table
				:data="tableData"
				style="width: 100%;">
				<el-table-column
					type=""
					prop="id"
					label="ID">
				</el-table-column>
				<el-table-column
					prop="name"
					label="标签名称">
				</el-table-column>
				<el-table-column
					prop="used_count"
					label="使用次数">
				</el-table-column>
				<el-table-column
					prop="create_time"
					label="创建时间">
				</el-table-column>
				<el-table-column
					prop="operation"
					label="操作">
					<template #default="scope">
						<el-button @click="handleEdit(scope.row)" type="text" size="small">编辑</el-button>
						<el-button @click="handleDel(scope.row)" type="text" size="small">删除</el-button>
					</template>
				</el-table-column>
			</el-table>
			<Pages :form="searchForm" :page-obj="page" @pageChange="handlePageChange" @pageJump="getList"></Pages>

			<el-dialog :title="title" v-model="dialogVisible" width="500px" destroy-on-close :close-on-click-modal="false">
				<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px">
					<el-form-item label="标签名称" prop="name">
						<el-input v-model="form.name"></el-input>
					</el-form-item>
				</el-form>
				<template #footer>
					<div class="dialog-footer">
						<el-button @click="dialogVisible = false">取 消</el-button>
						<el-button type="primary" @click="optSubmit('ruleForm')" :loading="loading">确 定</el-button>
					</div>
				</template>
			</el-dialog>
		</el-card>
	</el-main>
</template>

<script>
	import Pages from "@/components/pages/index.vue";

	export default {
		name: 'userLabel',
		components: {Pages},
		data() {
			return {
				searchForm: {
					name: '',
					limit: 15,
					page: 1
				},
				dialogVisible: false,
				title: '新增标签',
				page: {
					total: 0
				},
				tableData: [],
				dialogCateVisible: false,
				form: {
					id: 0,
					name: ''
				},
				rules: {
					name: [
						{required: true, message: '请输入标签名称', trigger: 'blur'}
					]
				},
				loading: false
			}
		},
		mounted() {
			this.getList()
		},
		methods: {
			// 获取列表
			async getList() {
				let res = await this.$API.label.list.get(this.searchForm)
				this.tableData = res.data.data
				this.page.total = res.data.total
			},
			// 初始化表单
			initForm() {
				this.form = {
					id: 0,
					name: ''
				}
			},
			// 搜索
			onSubmit() {
				this.searchForm.page = 1
				this.getList()
			},
			addLabel() {
				this.title = '添加标签'
				this.initForm()
				this.dialogVisible = true
			},
			// 编辑标签
			handleEdit(item) {
				this.title = '编辑标签'
				this.dialogVisible = true

				this.form.id = item.id
				this.form.name = item.name
			},
			// 删除标签
			handleDel(item) {
				this.$confirm('此操作将永久删除该标签 是否继续?', '提示', {
					confirmButtonText: '确定',
					cancelButtonText: '取消',
					type: 'warning'
				}).then(async () => {
					let res = await this.$API.label.del.get({id: item.id})
					if (res.code == 0) {
						this.$message.success(res.msg)
						this.getList()
					} else {
						this.$message.error(res.msg)
					}
				}).catch(() => {
				});
			},
			// 分页
			handlePageChange(page) {
				this.searchForm.page = page
				this.getList()
			},
			// 新增或编辑
			optSubmit(formName) {
				this.$refs[formName].validate(async (valid) => {
					if (valid) {
						this.loading = true
						let res;
						if (this.form.id) {
							res = await this.$API.label.edit.post(this.form)
						} else {
							res = await this.$API.label.add.post(this.form)
						}
						this.loading = false
						if (res.code == 0) {
							this.dialogVisible = false
							this.$message.success(res.msg)
							this.initForm()
							this.getList()
						} else {
							this.$message.error(res.msg)
						}
					}
				});
			}
		}
	}
</script>

<style scoped>
p {
	padding: 0;
	margin: 0;
}

.el-table__header tr,
.el-table__header th {
	padding: 0;
	height: 20px;
	line-height: 20px;
}

.del-btn {
	cursor: pointer;
	color: #F56C6C
}

.add-btn {
	cursor: pointer;
	margin-top: 18px;
	color: #409EFF
}
.el-button--small {
	padding: 0 !important;
}
</style>
